//
//  WLLUserAccountViewModel.swift
//  WLLWeibo
//
//  Created by 王乐乐 on 16/8/11.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class WLLUserAccountViewModel: NSObject {
    /*
     case DocumentationDirectory // documentation (Documentation)
     case DocumentDirectory // documents (Documents)
     */
    
    //路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
 /// 全局访问点
    static let shareTool :WLLUserAccountViewModel = WLLUserAccountViewModel()
    // 用户信息对象(为了防止频繁的操作沙盒)
    var userAccount : WLLUserAcountModel?
    
    override init() {
        super.init()
        // 给当前类身上的属性赋值
        userAccount = getUserAccount()
    }
    
     //MARK: - accessToken 判断是否登录的标志...计算型,实时判断
    var accessToken:String? {
        if userAccount?.access_token != nil {//登录
            if userAccount?.expires_date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                return userAccount?.access_token
            }else{
                //过期了
                return nil
            }
       
        }else{
            //没登录
            return nil
        }
    }
    
     //MARK: - 判断用户是否登录
    var isLogin :Bool{
        return accessToken != nil
    }
    
    
    
    
}
  //MARK: - 保存数据
extension WLLUserAccountViewModel{
    /**
     保存对象
     */
    func saveUserAccount (userAccount:WLLUserAcountModel)  {
        // 如果第一次保存数据成功后 使用userAccount  为nil
        //- 因为在第一次单例实例化的时候 走init方法 对userAccount赋值 从沙盒获取对象就是为nil 单例只会走一次init方法 所以不能再赋值 只能在保存对象的时候 程序员手动的为当前单例身上的对象赋值

        //给 useraccount 赋值
        self.userAccount = userAccount
    
     
  
        //保存对象
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
        
    }
    
    //获得对象
    func getUserAccount() -> WLLUserAcountModel? {
        //路径
     
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file)as?WLLUserAcountModel
        return result
        
    }
    
    
    
}


 //MARK: - 请求数据
extension WLLUserAccountViewModel{
    //获取授权...添加了一个闭包,参数用来判断是否
    func getUserCount(code:String,finish:(isSuccess:Bool)->())  {
        
        WLLNetTools.sharedTools.oauthLoadUserAccount(code, success: { (response) in
            guard let res = response as? [String:AnyObject] else{
                //失败
                finish(isSuccess: false)
                return
            }
            //字典转模型
            //            print(res)
            let userCount = WLLUserAcountModel(dict: res)
//            print(userCount)
            printLog("成功1")
            //请求个人信息  ///如果成功把闭包传递下去
            self.getUserInfo(userCount, finish: finish)
        }) { (error) in
            print("请求失败\(error)")
            finish(isSuccess: false)
        }
        
    }
    //MARK: - 请求个人信息
    
    func getUserInfo (userAccount:WLLUserAcountModel,finish:(isSuccess:Bool)->())  {
        
        WLLNetTools.sharedTools.oauthLoadUserInfo(userAccount, success: { (response) in
            guard let res = response as?[String:AnyObject] else{
                //失败
                finish(isSuccess: false)
                return
            }
            
            // 赋值
            userAccount.screen_name = res["screen_name"] as?String
            userAccount.avatar_large = res["avatar_large"] as?String
            
            print(userAccount)
            //成功
            printLog("成功2")
            
            //MARK: - 保存对象
//WARNING: 在这里保存对象
            self.saveUserAccount(userAccount)
            finish(isSuccess: true)
            
        }) { (error) in
            print("请求失败\(error)")
            finish(isSuccess: false)
        }
        
        
    }
    
    
    
}